perm filename BPNT11.PAL[ETH,REG] blob
sn#209148 filedate 1980-03-16 generic text, type C, neo UTF8
COMMENT ā VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .SBTTL BREAKPOINT FUNCTIONS, 1-JULY-75
C00004 00003 BREAK POINT TRAP
C00006 00004 BREAKPOINT CONTINUE
C00008 00005 REMOVE BREAKPOINTS
C00010 00006 REGISTER RESTORE
C00011 00007 SEARCH BP TABLE FOR ADDRESS IN R2
C00012 ENDMK
Cā;
.SBTTL BREAKPOINT FUNCTIONS, 1-JULY-75
;BP ;PRINTS ACTIVE BREAKPOINTS
;BP ADR ;INSERT BP
;BC ;BP CONTINUE
;BC COUNT ;BP CONTINUE FOR COUNT
;RB ;REMOVE CURRENT BP
;RB 0 ;REMOVE ALL BP'S
;RB ADR ;REMOVE BP AT ADR
;BREAK POINT INSERTION
.BP: TTISDL
BCC 4$ ;NUMBER, INSERT BP
1$: MOV #$BT+2,R1 ;PRINT ACTIVE BP'S
2$: MOV (R1),R0 ;GET BP ADDRESS
BEQ 3$ ;EMPTY
PNTOCT ;PRINT BP ADDRESS
3$: ADD #6,R1
CMP R1,#$BT+<6*$NB> ;FINISHED ?
BLT 2$ ;NO
BR $BPEX1
4$: TTOCTE ;INPUT EVEN ADDRESS
MOV R0,R2
JSR PC,$BTS ;SEARCH BP TABLE
BCC $BPERR ;ALREADY THERE
BEQ $BPERR ;TABLE FULL ALREADY
MOV R2,(R1) ;PUT INST ADR IN BP TABLE
MOV (R2),-(R1) ;PUT INST IN BP TABLE
CLR 4(R1) ;CLEAR CONTINUE COUNT
MOV #IOT,(R2) ;PUT BP IN PLACE OF INST
BR $BPEXT
;BREAK POINT TRAP
$BRKPT: CLR .HCFLG
MOV R0,$R0SAV ;SAVE ALL REGS R0 - R5
MOV #$R1SAV,R0
MOV R1,(R0)+
MOV R2,(R0)+
MOV R3,(R0)+
MOV R4,(R0)+
MOV R5,(R0)+
MOV SP,(R0) ;FOR REG PRINT ONLY, NOT RESTORED
ADD #4,(R0) ;MAKE IT AS IT WAS BEFORE BP
MOV (SP),R2 ;GET AFTER TRAP PC
TST -(R2) ;MAKE IT BEFORE TRAP PC
JSR PC,$BTS ;FIND BP IN TABLE
1$: MOV R2,(SP) ;PUT ADR ON STACK FOR "RTI" LATER
MOV R2,$BCA ;SAVE BP CONTINUE ADDRESS
PUSH -(R1) ;SAVE PROGRAM INST ON STACK
DEC 4(R1) ;DECREMENT CONTINUE COUNT
BGT .ABC ;COUNT GT 0, AUTO CONTINUE
2$: CLR TENRUN
PFORCE
PMSG <\BP AT >
MOV R2,R0
PNTOCT
PMSG <PS=>
MOV 4(SP),R0
PNTOCT
$BPEX1: PCRLF
$BPEXT: JMP $CONSL ;RETURN TO MONITOR
$BPERR: PMSG <BP ERR>
BR .BPERR
;BREAKPOINT CONTINUE
.BC: TTISDL
BCC .BCCNT ;CONTINUE COUNT
.ABC: CMP $BCA,2(SP) ;IS STACK OK, IF SO CONTINUE
BEQ 1$ ;OTHERWISE SP BAD OR NOT IN BP
.BCERR=.
PMSG <CAN'T CONT>
.BPERR=.
JMP $CNTLC
1$: MOV @$BCA,$BTIS ;SAVE WHATS AT BP ADDRESS
POP @$BCA ;RESTORE PROGRAM INST
JSR PC,.BCHC2 ;RESTORE REGISTERS
BIS #TBIT,2(SP) ;SET FOR T-BIT TRAP
RTT ;RESTART FOR ONE INSTRUCTION
;T-BIT TRAP COMES TO HERE
.BCCT: BIC #TBIT,2(SP) ;CLEAR T-BIT
MOV $BTIS,@$BCA ;PUT BP/INST BACK IN PROGRAM
RTI ;RESUME
.BCCNT: TTIDEC ;INPUT CONTINUE COUNT
BCS $BPERR
MOV R0,R5
MOV $BCA,R2
JSR PC,$BTS ;FIND ENTRY IN TABLE
BCS .BCERR ;NOT THERE
1$: MOV R5,2(R1) ;PUT COUNT IN TABLE
BR .ABC
;REMOVE BREAKPOINTS
.RB: TTISDL
BCS 2$ ;REMOVE CURRENT BP
TTOCTE ;INPUT BP ADDRESS
TST R0
BEQ 4$ ;IF 0, REMOVE ALL BP'S
MOV R0,R2
3$: JSR PC,$BTS ;FIND ADDRESS IN TABLE
BCC 1$
PMSG <CAN'T FIND>
BR .BPERR
1$: JSR PC,$RB ;REMOVE BP
11$: BR $BPEXT
2$: MOV $BCA,R2 ;REMOVE CURRENT BP
BR 3$
4$: JSR PC,.CB ;CLEAR ALL BP'S
BR $BPEXT
;CLEAR ALL BREAKPOINTS
.CB: MOV #$BT+2,R1
1$: MOV (R1),R2 ;GET TABLE ENTRY
BEQ 2$ ;EMPTY
JSR PC,$RB ;REMOVE BP
2$: ADD #6,R1
CMP R1,#$BT+<6*$NB>
BLT 1$
RTS PC
$RB: CLR (R1) ;CLEAR ADDRESS FIELD
CMP (R2),#IOT ;BP IN MEMORY ?
BNE 1$ ;NO
MOV -2(R1),(R2) ;YES, RESTORE INSTRUCTION
1$: RTS PC
;REGISTER RESTORE
.BCHC: TTITRM
.BCHC2: MOV #$R0SAV,R5
MOV (R5)+,R0
MOV (R5)+,R1
MOV (R5)+,R2
MOV (R5)+,R3
MOV (R5)+,R4
MOV (R5),R5
RTS PC
;BREAKPOINT REGISTER PRINTOUT
.RG: PFORCE
CLR R2 ;REGISTER NUMBER
MOV #$R0SAV,R1 ;REG SAVE TABLE POINTER
1$: PNTCI
'R
MOV R2,R0
PNTNBR ;PRINT REGISTER NUMBER
4$: PSLASH
2$: MOV (R1)+,R0
PNTOCT ;PRINT CONTENTS
INC R2
CMP R2,#6
BLT 1$
BGT 3$
PNTCI
"SP
BR 4$
3$: BR $BPEX1
;SEARCH BP TABLE FOR ADDRESS IN R2
;C-BIT SET SEARCH FAILURE
;C-BIT & Z-BIT SET SEARCH FAILURE & TABLE FULL
; R1 = ADDRESS OF EMPTY SLOT IF TABLE NOT FULL
;C-BIT CLEAR, FOUND & R1 = ADDRESS OF ENTRY
$BTS: MOV #$BT+2,R1 ;INIT BP TABLE POINTER
CLR R0
1$: TST (R1) ;IS IT EMPTY ?
BNE 2$ ;NO
MOV R1,R0 ;YES, SAVE ADDRESS OF EMPTY SLOT
BR 3$
2$: CMP (R1),R2 ;IS THIS THE ENTRY ?
BNE 3$ ;NO
CCC ;YES, INDICATE WITH C-BIT CLEAR
RTS PC
3$: ADD #6,R1 ;STEP TO NEXT ENTRY
CMP #$BT+<6*$NB>,R1
BGT 1$
MOV R0,R1 ;COUNDN'T FIND, Z-BIT SET = FULL
SEC ;INDICATE WITH C-BIT SET
RTS PC